home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 008 / src / hack.search.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  3KB  |  127 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2. /* hack.search.c version 1.0.1 - small correction in findit() */
  3.  
  4. #include "hack.h"
  5. #include "def.trap.h"
  6.  
  7. extern struct monst *makemon();
  8.  
  9. findit()   /* returns number of things found */
  10. {
  11.    int num;
  12.    register xchar zx,zy;
  13.    register struct gen *gtmp;
  14.    register struct monst *mtmp;
  15.    xchar lx,hx,ly,hy;
  16.  
  17.    if(u.uswallow) return(0);
  18.    for(lx = u.ux;(num = levl[lx-1][u.uy].typ) && num != CORR;lx--) ;
  19.    for(hx = u.ux;(num = levl[hx+1][u.uy].typ) && num != CORR;hx++) ;
  20.    for(ly = u.uy;(num = levl[u.ux][ly-1].typ) && num != CORR;ly--) ;
  21.    for(hy = u.uy;(num = levl[u.ux][hy+1].typ) && num != CORR;hy++) ;
  22.    num = 0;
  23.    for(zy = ly;zy <= hy;zy++)
  24.       for(zx = lx;zx <= hx;zx++) {
  25.          if(levl[zx][zy].typ == SDOOR) {
  26.             levl[zx][zy].typ = DOOR;
  27.             atl(zx,zy,'+');
  28.             num++;
  29.          } else if(levl[zx][zy].typ == SCORR) {
  30.             levl[zx][zy].typ = CORR;
  31.             atl(zx,zy,CORR_SYM);
  32.             num++;
  33.          } else if(gtmp = g_at(zx,zy,ftrap)) {
  34.             if(gtmp->gflag == PIERC){
  35.                (void) makemon(PM_PIERC,zx,zy);
  36.                num++;
  37.                deltrap(gtmp);
  38.                 } else if(!(gtmp->gflag & SEEN)) {
  39.                     gtmp->gflag |= SEEN;
  40.                     if(!vism_at(zx,zy)) atl(zx,zy,'^');
  41.                     num++;
  42.                 }
  43.          } else if(mtmp = m_at(zx,zy)) if(mtmp->mimic){
  44.             seemimic(mtmp);
  45.             num++;
  46.          }
  47.       }
  48.    return(num);
  49. }
  50.  
  51. dosearch()
  52. {
  53.    register xchar x,y;
  54.    register struct gen *tgen;
  55.    register struct monst *mtmp;
  56.  
  57.    for(x = u.ux-1; x < u.ux+2; x++)
  58.    for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) {
  59.       if(levl[x][y].typ == SDOOR && !rn2(7)) {
  60.          levl[x][y].typ = DOOR;
  61.          levl[x][y].seen = 0;   /* force prl */
  62.          prl(x,y);
  63.          nomul(0);
  64.       } else if(levl[x][y].typ == SCORR && !rn2(7)) {
  65.          levl[x][y].typ = CORR;
  66.          levl[x][y].seen = 0;   /* force prl */
  67.          prl(x,y);
  68.          nomul(0);
  69.       } else {
  70.          if(mtmp = m_at(x,y)) if(mtmp->mimic){
  71.             seemimic(mtmp);
  72.             pline("You find a mimic.");
  73.             return(1);
  74.          }
  75.          for(tgen = ftrap;tgen;tgen = tgen->ngen)
  76.          if(tgen->gx == x && tgen->gy == y &&
  77.             !(tgen->gflag & SEEN) && !rn2(8)) {
  78.             nomul(0);
  79.             pline("You find a%s.",
  80.                     traps[tgen->gflag & TRAPTYPE]);
  81.             if(tgen->gflag == PIERC) {
  82.                deltrap(tgen);
  83.                (void) makemon(PM_PIERC,x,y);
  84.                return(1);
  85.             }
  86.             tgen->gflag |= SEEN;
  87.             if(!vism_at(x,y)) atl(x,y,'^');
  88.          }
  89.       }
  90.    }
  91.    return(1);
  92. }
  93.  
  94. /* ARGSUSED */
  95. doidtrap(str) /* register */ char *str; {
  96. register struct gen *tgen;
  97. register int x,y;
  98.    if(!getdir()) return(0);
  99.    x = u.ux + u.dx;
  100.    y = u.uy + u.dy;
  101.    for(tgen = ftrap; tgen; tgen = tgen->ngen)
  102.       if(tgen->gx == x && tgen->gy == y &&
  103.          (tgen->gflag & SEEN)) {
  104.             pline("That is a%s.", traps[tgen->gflag & TRAPTYPE]);
  105.          return(0);
  106.       }
  107.    pline("I can't see a trap there.");
  108.    return(0);
  109. }
  110.  
  111. wakeup(mtmp)
  112. register struct monst *mtmp;
  113. {
  114.    mtmp->msleep = 0;
  115.    setmangry(mtmp);
  116.    if(mtmp->mimic) seemimic(mtmp);
  117. }
  118.  
  119. /* NOTE: we must check if(mtmp->mimic) before calling this routine */
  120. seemimic(mtmp)
  121. register struct monst *mtmp;
  122. {
  123.       mtmp->mimic = 0;
  124.       unpmon(mtmp);
  125.       pmon(mtmp);
  126. }
  127.